커스텀 예외 설계
커스텀 예외 설계
요구사항(IllegalArgumentException)을 만족하면서 명시적인 커스텀 예외를 사용하는 전략
핵심 전략 — 상속으로 요구사항과 명시성 동시 만족
// 커스텀 예외가 IllegalArgumentException을 상속
public class CarRacingException extends IllegalArgumentException {
private final ErrorCode errorCode;
public CarRacingException(ErrorCode errorCode) {
super(errorCode.getMessage());
this.errorCode = errorCode;
}
}
CarRacingException은 IllegalArgumentException의 하위 타입(IS-A 관계)이므로,
IllegalArgumentException을 요구하는 catch문이나 테스트에서 그대로 동작.
ErrorCode Enum 패턴
public enum ErrorCode {
EMPTY_CARS("[ERROR] 자동차 이름이 비어 있습니다."),
INVALID_CAR_NAME("[ERROR] 자동차 이름은 5자 이하여야 합니다."),
INVALID_ROUND("[ERROR] 시도 횟수는 1 이상의 정수여야 합니다.");
private final String message;
ErrorCode(String message) { this.message = message; }
public String getMessage() { return message; }
}
이점
| 방식 | 단점 |
|---|---|
throw new IllegalArgumentException("메시지") |
에러 종류 파악 어려움, 재사용 불가 |
throw new CarRacingException(ErrorCode.INVALID_CAR_NAME) |
에러 종류 명확, 한 곳에서 관리, 재사용 가능 |